import java.util.*;

public class YangHuiTriangle {

    public static  List<List<Integer>> generate(int numRows) {
         List<List<Integer>>  result = new ArrayList<>();

         //从第一行开始
        ArrayList<Integer> firstLow = new ArrayList<>();
        firstLow.add(1);
        //将第一行添加到result中
        result.add(firstLow);

        //处理后续的行
        for (int i = 1; i < numRows; i++) {
             //先获取前一行的列表
            List<Integer> preLow  = result.get(i - 1);
            //构造一个新的行
            ArrayList<Integer> currentLow = new ArrayList<>();
            //第一个元素是1
            currentLow.add(1);

            //利用状态转移方程处理中间元素
            for (int j = 1; j < i; j++) {
                currentLow.add(preLow.get(j) + preLow.get(j - 1));
            }

            //最后一个元素是1
            currentLow.add(1);

            //将当前行添加到结果列表中
            result.add(currentLow);
        }

         return result;
    }

    public static void main(String[] args) {

        List<List<Integer>> result = generate(5);
        for (int i = 0; i < result.size(); i++) {
            for(int j = 0;j < result.get(i).size();j++) {
                System.out.print(result.get(i).get(j) + " ");
            }

            System.out.println();
        }
    }
}
